/*
 * RespostaConexao.java
 *
 * Criado em 20 de Agosto de 2007, 17:47
 */

package codebreaker.protocolo;

import java.nio.ByteBuffer;

/**
 * Classe que define um pacote de rede do protocolo Code Breaker.
 * O pacote RESPOSTA_CONEXAO é enviado do servidor ao cliente,
 * informando se a conexao foi possivel, e caso contrario, o motivo.
 *
 * @author rodrigo
 */
public class RespostaConexao extends Pacote {
    
    public static final int ID = 1;
    public static final int TAMANHO = 1 + Integer.SIZE/Byte.SIZE + 1;
    
    public static final byte CONEXAO_ACEITA = 0;
    public static final byte NOME_CONFLITANTE = 1;
    public static final byte LIMITE_JOGADORES = 2;
    public static final byte ERRO_INTERNO = 3;
    
    private static final String respostas[] =
    {"aceito", "nome conflitante", "limite atingido", "erro interno"};
    
    private byte resposta;
    private int porta;
    private byte idJogador;
    
    /**
     * Cria uma nova instância de RespostaConexao
     */
    public RespostaConexao() {
	super();
    }
    
    /**
     * Cria um pacote a partir de um conjunto de bytes
     * @param bytes Conjunto de bytes
     * @param withID Sinaliza se os bytes tem o id do pacote
     */
    public RespostaConexao(byte bytes[], boolean withID) {
	super(bytes, withID);
    }
    
    /**
     * Cria uma nova instância de RespostaConexao
     * @param resposta Resposta ao pedido de conexao
     * @param porta Porta de acesso ao servidor
     */
    public RespostaConexao(byte resposta, int porta, byte idJogador) {
	this();
	this.resposta = resposta;
	this.porta = porta;
	this.idJogador = idJogador;
    }
    
    protected void fromBytes(ByteBuffer buffer) {
	resposta = buffer.get();
	porta = buffer.getInt();
	idJogador = buffer.get();
    }
    
    public byte getID() {
	return ID;
    }
    
    public int getTamanho() {
	return TAMANHO;
    }
    
    protected void writeBytes(ByteBuffer buffer) {
	buffer.put(resposta);
	buffer.putInt(porta);
    }
    
    public byte getResposta() {
	return resposta;
    }
    
    public void setResposta(byte resposta) {
	this.resposta = resposta;
    }
    
    public int getPorta() {
	return porta;
    }
    
    public void setPorta(int porta) {
	this.porta = porta;
    }
    
    /**
     * Retorna uma representacao do pacote
     * em texto(string)
     * @return Texto representando o pacote
     */
    public String toString() {
	return respostas[resposta];
    }
    
    public byte getIdJogador() {
	return idJogador;
    }
    
    public void setIdJogador(byte idJogador) {
	this.idJogador = idJogador;
    }
}
